package com.axend.lib_room.manager

import com.axend.lib_room.database.PetDataBase
import com.axend.lib_room.entity.PetInfoEntity
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch

/**
 * 宠物档案管理
 */

object PetInfoManager {

    private val petInfoDao by lazy { PetDataBase.getInstance().PetInfoDao() }


    /**
     * 保存宠物列表档案
     */
    suspend fun savePetInfoList(petInfoEntityList: MutableList<PetInfoEntity>) {
        petInfoDao.insertAll(petInfoEntityList)
    }


    /**
     *插入一条宠物档案
     */
    suspend fun savePetInfo(petInfoEntity: PetInfoEntity) {
        MainScope().launch {
            petInfoDao.insert(petInfoEntity)
        }
    }


    /**
     * 根据id删除宠物档案
     */
    suspend fun deletePetInfoItem(id: Int) {
        MainScope().launch {
            petInfoDao.deleteById(id)
        }
    }


    /**
     * 根据id查询宠物档案
     */
    suspend fun getPetInfoItem(id: Int): PetInfoEntity? {
        return petInfoDao.getById(id)
    }


    /**
     * 根据petinfoentity 删除宠物档案
     */
    suspend fun deletePetInfoItem(petInfoEntity: PetInfoEntity) {
        MainScope().launch {
            petInfoDao.delete(petInfoEntity)
        }
    }


    /**
     * 根据petinfoentity更新宠物档案
     */
    suspend fun updatePetInfoItem(petInfoEntity: PetInfoEntity) {
        MainScope().launch {
            petInfoDao.update(petInfoEntity)
        }
    }

    /**
     * 获取所有宠物档案
     */
    suspend fun getAllPetInfoList(): List<PetInfoEntity>? {
        return petInfoDao.getAll()
    }

    /**
     * 根据name、masterName、species、breed进行模糊查询
     */
    suspend fun getPetInfoListByName(
        keyWords: String,
        pageSize: Int,
        offset: Int
    ): List<PetInfoEntity>? {
        return petInfoDao.getByName(keyWords, pageSize, offset)
    }

    /**
     * 根据name、masterName、species、breed进行分页模糊查询总条目
     */
    suspend fun getPetInfoCount( keyWords: String): Int {
        return petInfoDao.getByNameCount(keyWords)
    }

    /**
     * 根据name、masterName、species、breed进行模糊查询所有数据
     */
    suspend fun getPetInfoListByName(keyWords: String): List<PetInfoEntity>? {
        return petInfoDao.getByNameAll(keyWords)
    }


    /**
     * 获取所有分页查询数据
     */
    suspend fun getPetInfoListByPage(pageSize: Int, offset: Int): List<PetInfoEntity>? {
        return petInfoDao.getAllByPage(pageSize, offset)
    }


    /**
     * 获取宠物档案livedata
     */
    fun getAllPetInfoLiveData() = petInfoDao.getAllLiveData()


    /**
     * 清除所有宠物档案
     */
    suspend fun deleteAllPetInfo(callBack: (String) -> Unit) {
        MainScope().launch {
            petInfoDao.deleteAll()
            callBack.invoke("删除成功")
        }
    }
}